// 1.引入FS模块
const fs = require('fs');


// 2.FS Global
// __dirname：当前js文件所在绝对路径，不包括当前js文件
console.log(__dirname);// D:\WorkSpace\...\NodeJS模块化
// __filename：当前js文件所在绝对路径，包括当前js文件
console.log(__filename);// D:\WorkSpace\...\NodeJS模块化\fs文件系统.js


// 3.FS Instance API
// open(path, flags[, mode], callback)：以flags行为mode权限异步打开path路径文件，flags行为有r、r+、rs、rs+等，mode权限默认为0666可读可写
fs.open(
  __dirname + '/static/fs_open.txt',
  'r+',
  (err, fd) => {
    if (err) {
      return console.error(err);
    }
    
    // fd表示打开文件返回的文件描述符，window中又称文件句柄
    console.log(fd);
  }
);

// stat(path, callback)：异步获取path路径文件信息
fs.stat(
  __dirname + '/static/fs_stat.txt',
  (err, stats) => {
    if (err) {
      return console.error(err);
    }
    
    // stat是fs.stat对象实例，stat对象提供方法判断文件的相关属性
    console.log(stats.isFile());// 文件
    console.log(stats.isDirectory());// 目录
    console.log(stats.isBlockDevice());// 块设备
    console.log(stats.isCharacterDevice());// 字符设备
    console.log(stats.isFIFO());// FIFO
    console.log(stats.isSocket());// Socket
  }
);

// writeFile(file, data[, options], callback)：以配置options将内容data异步写入file路径文件
fs.writeFile(
  __dirname + '/static/fs_writeFile.txt',
  'writeFile(file, data[, options], callback)：以配置options将内容data异步写入file路径文件',
  'utf8',
  (err) => {
    console.log(err);
  }
);

// read(fd, buffer, offset, length, position, callback)：从position开始异步读取文件到偏移量offset长度length的缓冲区buffer，fd为打开文件open返回的文件描述符
fs.open(
  __dirname + '/static/fs_read.txt',
  'r+',
  (err, fd) => {
    if (err) {
      return console.error(err);
    }
    
    const buffer = Buffer.alloc(1024);
    fs.read(fd, buffer, 0, buffer.length, 0, (err, bytes) => {
      if (err) {
        return console.error(err);
      }
      
      // bytes表示文件被读取字节数
      console.log(bytes);
      console.log(buffer.toString());
    });
  }
);

// close(fd, callback)：异步关闭文件，fd为打开文件open返回的文件描述符
fs.open(
  __dirname + '/static/fs_close.txt',
  'r+',
  (err, fd) => {
    if (err) {
      return console.error(err);
    }
    
    fs.close(fd, (err) => {
      console.log(err);
    });
  }
);

// unlink(path, callback)：删除文件
fs.unlink(
  __dirname + '/static/fs_unlink.txt',
  (err) => {
    console.log(err);
  }
);

// mkdir创建目录、readdir读取目录、rmdir删除目录